auto.waitFor();

// console.show();
//设置屏幕的宽度，像素值
var widthG = device.width;
var widthParam = widthG / 1440;
//设置屏幕的高度，像素值
var heightG = device.height
var heightParam = heightG / 3120;
// setScreenMetrics(widthG, heightG);
var myFunc = require("./myCommonFunction.js");
// var myWord = require("./myWord.js");

var appPgName = getPackageName("支付宝");
var now = new Date();
var hour = now.getHours();
var min = now.getMinutes();
myFunc.log(hour, min);
var useWiFi = true;

var storage = myFunc.initDateStorage();



var ret = myFunc.initNetWork(null, useWiFi);

var jifenNum = storage.get('支付宝积分')

// threads.start(function () {
//     sleep(780000)

//     myFunc.tuichu("支付宝");
//     // img2.recycle();
//     exit();
// });
threads.start(function () {
    if (ret) {
        get_alipay_points();
    }
    // img2.recycle();
    exit();
});


//蚂蚁会员积分
function get_alipay_points() {
    try {
        openAlipay();
        if (jifenNum >= 3) {
            if (hour >= 23) {
                storage.put('支付宝积分', 0);
            }
            return;
        }
        sleep(3000);
        myFunc.log("积分任务");
        myFunc.clickByText("我的");
        sleep(2000);

        // click(690 * widthParam, 780 * heightParam);
        if (!myFunc.clickByTextC("支付宝会员")) {
            click(544, 492)
        }

        // click(690 * widthParam, 710 * heightParam+100);
        sleep(3000);
        if (myFunc.clickByTextC("每日签到") && myFunc.findOne('去完成', 3000, 1) != null) {
            if (myFunc.findOne('去完成', 3000, 1) == null) {
                return
            }
            sleep(8000);
            doJifenTask(jifenNum, 1);
        }
    }
    catch (e) {
        myFunc.log(e);
        myFunc.tuichu("支付宝");
        get_alipay_points();
    }
}
    //蚂蚁会员积分
    function doJifenTask(jifenNum, taskNum) {
        sleep(3000);
        if (tuichuToStr('做任务赚积分', 500, undefined, () => get_alipay_points())) {
            return
        }
        var a = myFunc.findOnce('做任务赚积分');
        swipe(100, a.bounds().top, 100, 300, 1000);
        var tt = '';
        var list = null;
        var skipText = ['百度', '中国移动','悟空浏览器', '皮皮虾', '淘特App', '点淘', '逛一逛闲鱼app', '视频', '逛淘宝人生领新形象', '逛菜鸟', '淘宝特价版', '小组件', '玩'
            , '今日头条'];
        var task15 = ['15', '滑动', '0元下单'];
        var taskKeys = ['+3积分', '+3', '+1积分', '+1'];
        for (let index = 0; index < taskKeys.length; index++) {
            let key = taskKeys[index];
            while ((list = myFunc.find(key)).length > 0) {
                log(key, "list len", list.length);
                var end = true;
                list = list.filter(x => !isListIncludes(skipText, x.text()));
                for (var a of list) {
                    var tt = className('android.widget.TextView').boundsInside(0, a.bounds().top - 80, widthG, a.bounds().top).findOnce();
                    if (tt == null) {
                        continue;
                    }
                    var t = tt.text();
                    if (t.length == 0 || isListIncludes(skipText, t)) {
                        continue;
                    }
                    if (t.includes('15')) {
                    } else {
                        skipText.push(t);
                    }
                    log(key, t);
                    if (t == tt) {
                        continue;
                    }
                    end = false;
                    tt = t;
                    myFunc.clickCenter(a);
                    sleep(1000);
                    var q = text('去完成').boundsInside(100, 1400, 1000, 2000).findOne(2000);
                    if (q != null) {
                        q.click();
                        index = -1;
                    }

                    if (isListIncludes(task15, t)) {
                        sleep(3000);
                        if (t.includes("搜索")) {
                            var sou = myFunc.findOne('猜你想搜');
                            if (sou == null) {
                                sou = myFunc.findOne('历史搜索');
                            }
                            if(sou != null) {
                                click(sou.bounds().centerX(), sou.bounds().bottom + 30);
                            }
                        
                            sleep(2000);
                        }
                        for (let index = 0; index < 6; index++) {
                            swipe(500, 1500, 500, 500, 500);
                            sleep(3000);
                        }
                    } else {
                        sleep(5000);
                    }
                    if (t.includes('3秒')) {
                        sleep(5000);
                    } else {
                        huadong15s();
                    }

                    if (currentPackage() != getPackageName("支付宝")) {
                        myFunc.openMyApp('支付宝');
                    }
                    if (tuichuToStr('做任务赚积分', 500, undefined, () => get_alipay_points())) {
                        return
                    }
                    sleep(1000);
                }
                log(skipText);
                if (end) {
                    break;
                }

            }
        }

        var word = ['蚂蚁森林', '蚂蚁庄园', '蚂蚁新村', '农场', '飞猪小程序', '支付宝运动', '花花卡', '淘金币'];
        for (var i = 0; i < word.length; i++) {
            var str = word[i];
            if (myFunc.clickByTextC(str, 500)) {
                log('浏览', str);
                sleep(1000);
                var q = text('去完成').boundsInside(100, 1400, 1000, 2000).findOne(2000);
                if (q != null) {
                    q.click();
                }
                sleep(5000);
                huadong15s();
                if (currentPackage() != getPackageName("支付宝")) {
                    myFunc.openMyApp('支付宝');
                } else if (str == '蚂蚁新村') {
                    click(widthG / 2, heightG / 2);
                }
                if (tuichuToStr('做任务赚积分', 500, undefined, () => get_alipay_points())) {
                    return
                }
                sleep(1000);
            }
        }
        sleep(2000);
        var a = myFunc.find('15秒', true);
        var smd = myFunc.find('15s', true);
        a = a.concat(smd);
        var endWords = ['赢积分', '得积分', '赚积分', '得 3 积分', '赚3积分', '得3积分', '得5积分'];
        //从a中过滤 赢积分 赚积分 得 3 积分
        a = a.filter(x => !isListIncludes(endWords, x.text()) && !isListIncludes(skipText, x.text()));
        while (a.length > 0) {
            for (var item of a) {
                myFunc.clickCenter(item);
                log('15秒 (', item.text());
                sleep(1000);
                var q = text('去完成').boundsInside(100, 1400, 1000, 2000).findOne(2000);
                if (q != null) {
                    q.click();
                }
                sleep(3000);
                if (item.text().includes("搜")) {
                    var sou = myFunc.findOne('猜你想搜');
                    if(sou != null) {
                        click(sou.bounds().centerX(), sou.bounds().bottom + 30);
                        sleep(2000);
                    }
                
                    huadong();
                } else if (myFunc.findOnce('逛一逛', 1) != null) {
                    sleep(17000);
                } else {
                    huadong();
                }

                if (currentPackage() != getPackageName("支付宝")) {
                    myFunc.openMyApp('支付宝');
                }
                if (tuichuToStr('做任务赚积分', undefined, undefined, () => get_alipay_points())) {
                    return
                }
                sleep(1000);
            }
            a = myFunc.find('15秒', true);
            a = a.filter(x => !isListIncludes(endWords, x.text()) && !isListIncludes(skipText, x.text()));
        }
        if (taskNum < 4) {
            myFunc.clickTextByBtn('换一换');
            sleep(2000);
            taskNum++;
            doJifenTask(jifenNum, taskNum);
            return;
        }
        if (myFunc.findOnce('已完成浏览任务') == null && myFunc.clickByTextC('逛一逛赚积分')) {
            log('逛15秒赚积分');
            sleep(2000);
            huadong();
        }
        a = myFunc.find('15秒', true);
        a = a.filter(x => !isListIncludes(endWords, x.text()) && !isListIncludes(skipText, x.text()));
        if (myFunc.findOnce('逛一逛赚积分', 1) != null && a.length == 0) {
            jifenNum = jifenNum + 1;
            storage.put('支付宝积分', jifenNum);
            myFunc.closeAppEx("支付宝");
            if(jifenNum < 4) {
                throw '支付宝积分重试';

            }
        }

    }

    function huadong15s() {
        if (myFunc.findOnce('做任务赚积分') == null &&
            myFunc.findOnce('逛一逛', 1) != null) {
            for (let index = 0; index < 6; index++) {
                swipe(500, 1500, 500, 500, 500);
                sleep(3000);
            }
        }
    }

    function isListIncludes(list, str) {
        return list.some(item => str.includes(item))
    }


    function openAlipay() {
        if (appPgName != currentPackage()) {
            myFunc.openMyApp("支付宝");
        } else {
            if (textContains("首页").exists()) {
                myFunc.clickText("首页");
                sleep(800)
            }
            if (!textContains('收付款').exists()) {
                myFunc.tuichuToStr('收付款')
            }
        }
    }


    function huadong() {
        for (let index = 0; index < 6; index++) {
            swipe(500, 1500, 500, 500, 500)
            sleep(1500);
            swipe(500, 500, 500, 1500, 500)
            sleep(1500);
        }
    }


    function tuichuToStr(searchTexts, retryDelay, useFuzzy, prematureExitCallback) {
        retryDelay = (retryDelay === undefined) ? 1000 : retryDelay;
        // 如果 useFuzzy 未传入或传入 undefined，则设置为 false
        useFuzzy = (useFuzzy === undefined) ? false : useFuzzy;

        // 将输入统一处理为数组，便于后续遍历
        const textsToFind = Array.isArray(searchTexts) ? searchTexts : [searchTexts];
        const MAX_ATTEMPTS = 8; // 最多尝试次数 (原逻辑 idx > 10 对应 0 到 10 共 11 次)
        let foundText = false; // 标记是否找到了任何一个目标文本
        let didPrematureExit = false; // 标记是否因为特殊条件提前退出
        // 2. 生成符合需求的代码示例 (主体循环)
        for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
            log(`开始第 ${attempt + 1} 次尝试查找...`);
            foundText = true; // 重置查找状态
            // 2.1 内部循环：查找当前屏幕上的文本
            for (var word of textsToFind) {
                let widget = null;
                widget = useFuzzy
                    ? textContains(word).findOne(800) // 模糊查找
                    : text(word).findOne(800);        // 精确查找
                if (widget === null) {
                    foundText = false;
                    break;
                }
            }
            // 2.2 判断查找结果
            if (foundText) {
                break; // 找到文本，退出外层尝试循环
            }
            // 2.3 如果未找到，并且还未达到最大尝试次数，则执行返回、等待、检查特殊退出条件
            if (attempt < MAX_ATTEMPTS - 1) {
                try {
                    back(); // 执行返回操作
                    sleep(retryDelay); // 等待指定时间
                    // 2.4 检查特殊退出条件
                    let foundPaymentText = myFunc.findOnce('收付款') !== null;
                    let isLauncherActivity = currentActivity() === 'com.microsoft.launcher.LauncherActivity'; // 假设 currentActivity 全局可用
                    if (foundPaymentText || isLauncherActivity) {
                        log('到首页/桌面');
                        didPrematureExit = true;
                        // 3. 提供代码解释 & 最佳实践建议 (回调检查)
                        if (typeof prematureExitCallback === 'function') {
                            try {
                                log('执行回调函数', prematureExitCallback);
                                prematureExitCallback();
                            } catch (e) {
                                log(`执行回调函数时出错: ${e}`);
                            }
                        } else if (prematureExitCallback !== undefined) {
                            // 如果提供了参数但不是函数，给出提示可能有助于调试
                            log('警告：提供了 prematureExitCallback 参数，但它不是一个函数。');
                        }
                        break; // 满足特殊条件，退出外层尝试循环
                    }
                } catch (e) {
                    log(`在执行 back(), sleep() 或检查退出条件时发生错误: ${e}`);
                    // 发生错误时，可能需要决定是继续还是中断，这里选择中断以避免潜在的无限循环或意外行为
                    didPrematureExit = false; // 明确未因预期条件退出
                    break;
                }
            } else {
                // 已达到最大尝试次数但仍未找到
                log(`已达到最大尝试次数 (${MAX_ATTEMPTS})，未找到目标文本。`);
                // 2.4 检查特殊退出条件
                let foundPaymentText = myFunc.findOnce('收付款') !== null;
                let isLauncherActivity = currentActivity() === 'com.microsoft.launcher.LauncherActivity'; // 假设 currentActivity 全局可用
                if (foundPaymentText || isLauncherActivity) {
                    log('到首页/桌面');
                    didPrematureExit = true;
                    // 3. 提供代码解释 & 最佳实践建议 (回调检查)
                    if (typeof prematureExitCallback === 'function') {
                        try {
                            log('执行回调函数', prematureExitCallback);
                            prematureExitCallback();
                        } catch (e) {
                            log(`执行回调函数时出错: ${e}`);
                        }
                    } else if (prematureExitCallback !== undefined) {
                        // 如果提供了参数但不是函数，给出提示可能有助于调试
                        log('警告：提供了 prematureExitCallback 参数，但它不是一个函数。');
                    }
                    break; // 满足特殊条件，退出外层尝试循环
                }

            }
        }
        // 返回是否因为特殊条件而提前退出，与原函数行为保持一致
        return didPrematureExit;
    }



